package com.xltt.watchclient.module.service;

import android.content.ContentResolver;
import android.content.Context;
import android.database.ContentObserver;
import android.database.Cursor;
import android.net.Uri;
import android.os.Handler;
import android.os.Message;

import com.xltt.watchclient.LogTool;
import com.xltt.watchclient.model.SmsBodyEntity;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class SMSContentObserver extends ContentObserver {
    private static final int MSG_INBOX = 1;
    private Context mContext;
    private Handler mHandler; // 更新UI线程

    public SMSContentObserver(Context mContext,
                              Handler mHandler) {
        super(mHandler); // 所有ContentObserver的派生类都需要调用该构造方法
        this.mContext = mContext;
        this.mHandler = mHandler;
        LogTool.d("SMSContentObserver()");
        mContext.getContentResolver().registerContentObserver(Uri.parse("content://sms/"), true, this);
    }

    /**
     * 当观察到的Uri发生变化时，回调该方法去处理。所有ContentObserver的派生类都需要重载该方法去处理逻辑
     * selfChange:回调后，其值一般为false，该参数意义不大
     */
    @Override
    public void onChange(boolean selfChange) {
        // TODO Auto-generated method stub
        LogTool.d("onChange()");
        ContentResolver cr = mContext.getContentResolver();
        String[] projection = new String[]{"_id", "address", "person", "body", "date", "type"};
        Cursor cur = cr.query(Uri.parse("content://sms"), null, "type = 1 and read = 0 and type = 1", null, "date desc");
        if (null == cur) {
            LogTool.d("Cursor is null");
            return;
        }
        SmsBodyEntity smdBody = null;
        while (cur.moveToNext()) {
            String phone = cur.getString(cur.getColumnIndex("address"));//手机号
            String person = cur.getString(cur.getColumnIndex("person"));//联系人姓名列表
            String content = cur.getString(cur.getColumnIndex("body"));//短信内容
            LogTool.d("最新短信 , phone = " + phone + ",person = " + person + ",content = " + content);
            smdBody = new SmsBodyEntity(phone,person,content);
            Message msg = new Message();
            msg.obj = smdBody;
            mHandler.sendMessage(msg);
            break;
        }
        super.onChange(selfChange);
    }
}


/**
 * sms主要结构：
 *  _id：短信序号，如100
 *  thread_id：对话的序号，如100，与同一个手机号互发的短信，其序号是相同的
 *  address：发件人地址，即手机号，如+8613811810000
 *  person：发件人，如果发件人在通讯录中则为具体姓名，陌生人为null
 *  date：日期，long型，如1256539465022，可以对日期显示格式进行设置
 *  protocol：协议0SMS_RPOTO短信，1MMS_PROTO彩信
 *  read：是否阅读0未读，1已读
 *  status：短信状态-1接收，0complete,64pending,128failed
 *  type：短信类型1是接收到的，2是已发出
 *  body：短信具体内容
 *  service_center：短信服务中心号码编号，如+8613800755500

 ————————————————
 版权声明：本文为CSDN博主「LXB-89」的原创文章，遵循CC 4.0 BY-SA版权协议，转载请附上原文出处链接及本声明。
 原文链接：https://blog.csdn.net/adminlxb89/article/details/81068419
}
 */
